home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / latex209 / contrib / ifac / ifac.bst < prev    next >
Text File  |  1993-08-02  |  24KB  |  1,293 lines

  1. %%%%%%%%%%%%%%%%%%%%%%%%%% End of IFAC.bst %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %%% ===========================================================================
  3. %%%  @LaTeX-style-file{
  4. %%%     author          = "Silvano Balemi",
  5. %%%     version         = "1.4",
  6. %%%     date            = "12-MAR-1993",
  7. %%%     filename        = "IFAC.bst",
  8. %%%     address         = "Automatic Control Laboratory
  9. %%%                        Swiss Federal Institute of Technology (ETH)
  10. %%%                        8092 Zurich, Switzerland",
  11. %%%     telephone       = "+41 (1) 256.55.35",
  12. %%%     FAX             = "+41 (1) 262.43.62",
  13. %%%     email           = "balemi@aut.ee.ethz.ch (Internet)",
  14. %%%     keywords        = "BibTeX, IFAC proceedings, Camera ready,
  15. %%%                        publisher style",
  16. %%%     supported       = "yes",
  17. %%%     docstring       = "BibTeX style file for reference according to
  18. %%%                        the instruction of the  International Federation
  19. %%%                        of Automatic Control (IFAC) (modified from
  20. %%%                        alpha.bst)
  21. %%%                        To be used with the style files 
  22. %%%                        IFACarticle.sty, automatica.sty or the substyle file
  23. %%%                        harvard.sty .
  24. %%%                        It is based on modified version of
  25. %%%                        agsm.bst by Peter Williams
  26. %%%                        peterw@archsci.arch.su.oz.au",
  27. %%%  }
  28. %%% ===========================================================================
  29.  
  30. ENTRY
  31.   { address
  32.     author
  33.     booktitle
  34.     chapter
  35.     edition
  36.     editor
  37.     howpublished
  38.     institution
  39.     journal
  40.     key
  41.     month
  42.     note
  43.     number
  44.     organization
  45.     pages
  46.     publisher
  47.     school
  48.     series
  49.     title
  50.     type
  51.     volume
  52.     year
  53.   }
  54.   { field.used }
  55.   { extra.label sort.label list.year }
  56.  
  57. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  58.  
  59. FUNCTION {init.state.consts}
  60. { #0 'before.all :=
  61.   #1 'mid.sentence :=
  62.   #2 'after.sentence :=
  63.   #3 'after.block :=
  64. }
  65.  
  66. STRINGS { s t f }
  67.  
  68. FUNCTION {output.nonnull}
  69. { 's :=
  70.   output.state mid.sentence =
  71.     { ". " * write$ }
  72.     { output.state after.block =
  73.     { add.period$ write$
  74.       newline$
  75.       "\newblock " write$
  76.     }
  77.     { output.state before.all =
  78.         'write$
  79.         { add.period$ " " * write$ }
  80.       if$
  81.     }
  82.       if$
  83.       mid.sentence 'output.state :=
  84.     }
  85.   if$
  86.   s
  87. }
  88.  
  89. FUNCTION {output.yearnull}
  90. { 's :=
  91.   output.state mid.sentence =
  92.     { ". " * write$ }
  93.     { output.state after.block =
  94.     { add.period$ write$
  95.       newline$
  96.       "\newblock " write$
  97.     }
  98.     { output.state before.all =
  99.         'write$
  100.         { add.period$ " " * write$ }
  101.       if$
  102.     }
  103.       if$
  104.       mid.sentence 'output.state :=
  105.     }
  106.   if$
  107.   s
  108. }
  109.  
  110. FUNCTION {output}
  111. { duplicate$ empty$
  112.     'pop$
  113.     'output.nonnull
  114.   if$
  115. }
  116.  
  117. FUNCTION {output.check}
  118. { 't :=
  119.   duplicate$ empty$
  120.     { pop$ "empty " t * " in " * cite$ * warning$ }
  121.     'output.nonnull
  122.   if$
  123. }
  124.  
  125. FUNCTION {item.check}
  126. { 't :=
  127.   empty$
  128.     { "empty " t * " in " * cite$ * warning$ }
  129.     { skip$ }
  130.   if$
  131. }
  132.  
  133. FUNCTION {fin.entry}
  134. { add.period$
  135.   write$
  136.   newline$
  137. }
  138.  
  139. FUNCTION {new.block}
  140. { output.state before.all =
  141.     'skip$
  142.     { after.block 'output.state := }
  143.   if$
  144. }
  145.  
  146. FUNCTION {not}
  147. {   { #0 }
  148.     { #1 }
  149.   if$
  150. }
  151.  
  152. FUNCTION {and}
  153. {   'skip$
  154.     { pop$ #0 }
  155.   if$
  156. }
  157.  
  158. FUNCTION {or}
  159. {   { pop$ #1 }
  160.     'skip$
  161.   if$
  162. }
  163.  
  164. FUNCTION {field.or.null}
  165. { duplicate$ empty$
  166.     { pop$ "" }
  167.     'skip$
  168.   if$
  169. }
  170.  
  171. FUNCTION {emphasize}
  172. { duplicate$ empty$
  173.     { pop$ "" }
  174.     { "{\em " swap$ * "}" * }
  175.   if$
  176. }
  177.  
  178. FUNCTION {embolden}
  179. { duplicate$ empty$
  180.     { pop$ "" }
  181.     { "{\bf " swap$ * "}" * }
  182.   if$
  183. }
  184.  
  185. FUNCTION {quote}
  186. { duplicate$ empty$
  187.     { pop$ "" }
  188.     { "`" swap$ * "'" * }
  189.   if$
  190. }
  191.  
  192. INTEGERS { nameptr namesleft numnames }
  193.  
  194. FUNCTION {format.names}
  195. { 's :=
  196.   #1 'nameptr :=
  197.   s num.names$ 'numnames :=
  198.   numnames 'namesleft :=
  199.     { namesleft #0 > }
  200. %    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
  201.     { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
  202.       nameptr #1 >
  203.     { namesleft #1 >
  204.             s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
  205.     { ", " * t * }
  206.         { numnames #2 >
  207.         { "" * }
  208.         'skip$
  209.           if$
  210.           t "others" =
  211.         { " et~al." * }
  212.         { " and " * t * }
  213.           if$
  214.         }
  215.       if$
  216.     }
  217.     't
  218.       if$
  219.       nameptr #1 + 'nameptr :=
  220.       namesleft #1 - 'namesleft :=
  221.     }
  222.   while$
  223. }
  224.  
  225. FUNCTION {format.authors}
  226. { author empty$
  227.     { "" }
  228.     { author format.names }
  229.   if$
  230. }
  231.  
  232.  
  233. FUNCTION {format.editor.names}
  234. { 's :=
  235.   'f :=
  236.   #1 'nameptr :=
  237.   s num.names$ 'numnames :=
  238.   numnames 'namesleft :=
  239.     { namesleft #0 > }
  240.     { s nameptr f format.name$ 't :=
  241.       nameptr #1 >
  242.     { namesleft #1 >
  243.         { ", " * t * }
  244.         { t "others" =
  245.         { " et~al." * }
  246.         { " and " * t * }
  247.           if$
  248.         }
  249.       if$
  250.     }
  251.     't
  252.       if$
  253.       nameptr #1 + 'nameptr :=
  254.       namesleft #1 - 'namesleft :=
  255.     }
  256.   while$
  257. }
  258.  
  259. FUNCTION {format.editors}
  260. { editor empty$
  261.     { "" }
  262.     { "{vv~}{ll}{, jj}{, f.}" editor format.editor.names
  263.       editor num.names$ #1 >
  264.     { " (Eds.)" * }
  265.     { " (Ed.)" * }
  266.       if$
  267.     }
  268.   if$
  269. }
  270.  
  271. FUNCTION {format.editors.reverse}
  272. { editor empty$
  273.     { "" }
  274.     { "{f.~}{vv~}{ll}{, jj}" editor format.editor.names
  275.       editor num.names$ #1 >
  276.     { " (Eds.)" * }
  277.     { " (Ed.)" * }
  278.       if$
  279.     }
  280.   if$
  281. }
  282.  
  283.  
  284. FUNCTION {format.title}
  285. { title empty$
  286.     { "" }
  287.     { title "t" change.case$ }
  288.   if$
  289. }
  290.  
  291. FUNCTION {n.dashify}
  292. { 't :=
  293.   ""
  294.     { t empty$ not }
  295.     { t #1 #1 substring$ "-" =
  296.     { t #1 #2 substring$ "--" = not
  297.         { "--" *
  298.           t #2 global.max$ substring$ 't :=
  299.         }
  300.         {   { t #1 #1 substring$ "-" = }
  301.         { "-" *
  302.           t #2 global.max$ substring$ 't :=
  303.         }
  304.           while$
  305.         }
  306.       if$
  307.     }
  308.     { t #1 #1 substring$ *
  309.       t #2 global.max$ substring$ 't :=
  310.     }
  311.       if$
  312.     }
  313.   while$
  314. }
  315.  
  316. FUNCTION {format.btitle}
  317. { title emphasize
  318. }
  319.  
  320. FUNCTION {tie.or.space.connect}
  321. { duplicate$ text.length$ #3 <
  322.     { "~" }
  323.     { " " }
  324.   if$
  325.   swap$ * *
  326. }
  327.  
  328. FUNCTION {either.or.check}
  329. { empty$
  330.     'pop$
  331.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  332.   if$
  333. }
  334.  
  335. FUNCTION {format.bvolume}
  336. { volume empty$
  337.     { "" }
  338.     { "Vol." volume tie.or.space.connect
  339.       series empty$
  340.     'skip$
  341.     { " of " * series emphasize * }
  342.       if$
  343.       "volume and number" number either.or.check
  344.     }
  345.   if$
  346. }
  347.  
  348. FUNCTION {format.number.series}
  349. { volume empty$
  350.     { number empty$
  351.     { series field.or.null }
  352.     { output.state mid.sentence =
  353.         { "number" }
  354.         { "Number" }
  355.       if$
  356.       number tie.or.space.connect
  357.       series empty$
  358.         { "there's a number but no series in " cite$ * warning$ }
  359.         { " In " * series quote * }
  360.       if$
  361.     }
  362.       if$
  363.     }
  364.     { "" }
  365.   if$
  366. }
  367.  
  368. FUNCTION {format.edition}
  369. { edition empty$
  370.     { "" }
  371.     { output.state mid.sentence =
  372.     { edition "l" change.case$ " edn" * }
  373.     { edition "t" change.case$ " edn" * }
  374.       if$
  375.     }
  376.   if$
  377. }
  378.  
  379. INTEGERS { multiresult }
  380.  
  381. FUNCTION {multi.page.check}
  382. { 't :=
  383.   #0 'multiresult :=
  384.     { multiresult not
  385.       t empty$ not
  386.       and
  387.     }
  388.     { t #1 #1 substring$
  389.       duplicate$ "-" =
  390.       swap$ duplicate$ "," =
  391.       swap$ "+" =
  392.       or or
  393.     { #1 'multiresult := }
  394.     { t #2 global.max$ substring$ 't := }
  395.       if$
  396.     }
  397.   while$
  398.   multiresult
  399. }
  400.  
  401. FUNCTION {format.pages}
  402. { pages empty$
  403.     { "" }
  404.     { pages multi.page.check
  405.     { "pp.~" pages n.dashify * }
  406.     { "p.~" pages * }
  407.       if$
  408.     }
  409.   if$
  410. }
  411.  
  412. FUNCTION {format.vol.num.pages}
  413. { volume embolden field.or.null
  414.   number empty$
  415.     'skip$
  416.     { "(" number * ")" * *
  417.       volume empty$
  418.     { "there's a number but no volume in " cite$ * warning$ }
  419.     'skip$
  420.       if$
  421.     }
  422.   if$
  423.   pages empty$
  424.     'skip$
  425.     { duplicate$ empty$
  426.     { pop$ format.pages }
  427.     { ",~" * pages n.dashify * }
  428.       if$
  429.     }
  430.   if$
  431. }
  432.  
  433. FUNCTION {format.chapter.pages}
  434. { chapter empty$
  435.     'format.pages
  436.     { type empty$
  437.     { "chapter" }
  438.     { type "l" change.case$ }
  439.       if$
  440.       chapter tie.or.space.connect
  441.       pages empty$
  442.     'skip$
  443.     { ", " * format.pages * }
  444.       if$
  445.     }
  446.   if$
  447. }
  448.  
  449. FUNCTION {format.in.ed.booktitle}
  450. { booktitle empty$
  451.     { "" }
  452.     { editor empty$
  453.     { "In " booktitle quote * }
  454.     { "In " format.editors.reverse * ". " * booktitle quote * }
  455.       if$
  456.     }
  457.   if$
  458. }
  459.  
  460. FUNCTION {empty.misc.check}
  461. { author empty$ title empty$ howpublished empty$
  462.   month empty$ year empty$ note empty$
  463.   and and and and and
  464.   key empty$ not and
  465.     { "all relevant fields are empty in " cite$ * warning$ }
  466.     'skip$
  467.   if$
  468. }
  469.  
  470. FUNCTION {format.thesis.type}
  471. { type empty$
  472.     'skip$
  473.     { pop$
  474.       type "t" change.case$
  475.     }
  476.   if$
  477. }
  478.  
  479. FUNCTION {format.tr.number}
  480. { type empty$
  481.     { "Technical Report" }
  482.     'type
  483.   if$
  484.   number empty$
  485.     { "t" change.case$ }
  486.     { number tie.or.space.connect }
  487.   if$
  488. }
  489.  
  490. FUNCTION {format.article.crossref}
  491. { key empty$
  492.     { journal empty$
  493.     { "need key or journal for " cite$ * " to crossref " * crossref *
  494.       warning$
  495.       ""
  496.     }
  497.     { "in {\em " journal * "\/} \cite{" * crossref * "}" *}
  498.       if$
  499.     }
  500.     { "In \citeasnoun{" crossref * "}" * }
  501.   if$
  502.  
  503. }
  504.  
  505. FUNCTION {format.book.crossref}
  506. { volume empty$
  507.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  508.       "in "
  509.     }
  510.     { "Vol." volume tie.or.space.connect
  511.       " of " *
  512.     }
  513.   if$
  514.   editor empty$
  515.   editor field.or.null author field.or.null =
  516.   or
  517.     { key empty$
  518.     { series empty$
  519.         { "need editor, key, or series for " cite$ * " to crossref " *
  520.           crossref * warning$
  521.           "" *
  522.         }
  523.         { "{\em " * series * "\/} \cite{" * crossref * "}" *}
  524.       if$
  525.     }
  526.     { " \citeasnoun{" * crossref * "}" * }
  527.       if$
  528.     }
  529.     { " \citeasnoun{" * crossref * "}" * }
  530.   if$
  531. }
  532.  
  533. FUNCTION {format.incoll.inproc.crossref}
  534. { editor empty$
  535.   editor field.or.null author field.or.null =
  536.   or
  537.     { key empty$
  538.     { booktitle empty$
  539.         { "need editor, key, or booktitle for " cite$ * " to crossref " *
  540.           crossref * warning$
  541.           ""
  542.         }
  543.         { "in {\em " booktitle * "\/}" * " \cite{" * crossref * "}" *}
  544.       if$
  545.     }
  546.     { "In \citeasnoun{" crossref * "}" * }
  547.       if$
  548.     }
  549.     { "In \citeasnoun{" crossref * "}" * }
  550.   if$
  551.   
  552. }
  553.  
  554. INTEGERS { len }
  555.  
  556. FUNCTION {chop.word}
  557. { 's :=
  558.   'len :=
  559.   s #1 len substring$ =
  560.     { s len #1 + global.max$ substring$ }
  561.     's
  562.   if$
  563. }
  564.  
  565. FUNCTION {format.lab.names.abbr}
  566. { 's :=
  567.   s num.names$ 'numnames :=
  568.   numnames #1 >
  569.     { numnames #2 >
  570.     { s #1 "{vv~}{ll}" format.name$ " {\em et al.}" * }
  571.     { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  572.             { s #1 "{vv~}{ll}" format.name$ " {\em et al.}" * }
  573.         { s #1 "{vv~}{ll}" format.name$ " and " *
  574.               s #2 "{vv~}{ll}" format.name$ * 
  575.             }
  576.           if$
  577.         }
  578.       if$
  579.     }
  580.     { s #1 "{vv~}{ll}" format.name$ }
  581.   if$
  582. }
  583.  
  584. FUNCTION {format.lab.names.full}
  585. { 's :=
  586.   #1 'nameptr :=
  587.   s num.names$ 'numnames :=
  588.   numnames 'namesleft :=
  589.     { namesleft #0 > }
  590.     { s nameptr "{vv~}{ll}" format.name$ 't :=
  591.       nameptr #1 >
  592.     { namesleft #1 >
  593.         { ", " * t * }
  594.         { t "others" =
  595.         { " et~al." * }
  596.         { " and " * t * }
  597.           if$
  598.         }
  599.       if$
  600.     }
  601.     't
  602.       if$
  603.       nameptr #1 + 'nameptr :=
  604.       namesleft #1 - 'namesleft :=
  605.     }
  606.   while$
  607. }
  608.  
  609. INTEGERS { author.field editor.field organization.field title.field key.field }
  610.  
  611. FUNCTION {init.field.constants}
  612. { #0 'author.field :=
  613.   #1 'editor.field :=
  614.   #2 'organization.field :=
  615.   #3 'title.field :=
  616.   #4 'key.field :=
  617. }
  618.  
  619. FUNCTION {make.list.label}
  620. { author.field field.used =
  621.     { format.authors }
  622.     { editor.field field.used =
  623.         { format.editors }
  624.         { organization.field field.used =
  625.             { "The " #4 organization chop.word #3 text.prefix$ }
  626.             { title.field field.used =
  627.                 { format.btitle }
  628.                 { key.field field.used =
  629.                     { key #3 text.prefix$ }
  630.                     { "Internal error :001 on " cite$ * " label" * warning$ }
  631.                   if$
  632.                 }
  633.               if$
  634.             }
  635.           if$
  636.         }
  637.       if$
  638.     }
  639.   if$
  640. }
  641.  
  642. FUNCTION {make.full.label}
  643. { author.field field.used =
  644.     { author format.lab.names.full }
  645.     { editor.field field.used =
  646.         { editor format.lab.names.full }
  647.         { organization.field field.used =
  648.             { "The " #4 organization chop.word #3 text.prefix$ }
  649.             { title.field field.used =
  650.                 { format.btitle }
  651.                 { key.field field.used =
  652.                     { key #3 text.prefix$ }
  653.                     { "Internal error :001 on " cite$ * " label" * warning$ }
  654.                   if$
  655.                 }
  656.               if$
  657.             }
  658.           if$
  659.         }
  660.       if$
  661.     }
  662.   if$
  663. }
  664.  
  665. FUNCTION {make.abbr.label}
  666. { author.field field.used =
  667.     { author format.lab.names.abbr }
  668.     { editor.field field.used =
  669.         { editor format.lab.names.abbr }
  670.         { organization.field field.used =
  671.             { "The " #4 organization chop.word #3 text.prefix$ }
  672.             { title.field field.used =
  673.                 { format.btitle }
  674.                 { key.field field.used =
  675.                     { key #3 text.prefix$ }
  676.                     { "Internal error :001 on " cite$ * " label" * warning$ }
  677.                   if$
  678.                 }
  679.               if$
  680.             }
  681.           if$
  682.         }
  683.       if$
  684.     }
  685.   if$
  686. }
  687.  
  688. FUNCTION {output.bibitem}
  689. { newline$
  690.   "\harvarditem[" write$
  691.   make.abbr.label write$
  692.   "]{" write$
  693.   make.abbr.label write$
  694.   "}{" write$
  695.   list.year write$
  696.   "}{" write$
  697.   cite$ write$
  698.   "}" write$
  699.   newline$
  700.   ""
  701.   before.all 'output.state :=
  702. }
  703.  
  704. FUNCTION {list.label.output}
  705. { make.list.label " " * write$
  706. }
  707.  
  708. FUNCTION {article}
  709. { output.bibitem
  710.   list.label.output
  711.   " (" list.year * ")" * output.yearnull
  712.   author "author" item.check
  713.   title.field field.used =
  714.     { skip$ }
  715.     { format.title quote "title" output.check }
  716.   if$
  717.   crossref missing$
  718.     { journal emphasize "journal" duplicate$ item.check
  719.       pages empty$
  720.         {
  721.           output
  722.         }
  723.         {
  724.           " " *
  725.           format.vol.num.pages * output
  726.         }
  727.       if$
  728.     }
  729.     { format.article.crossref output.nonnull
  730.       format.pages output
  731.     }
  732.   if$
  733.   new.block
  734.   note output
  735.   fin.entry
  736. }
  737.  
  738. FUNCTION {book}
  739. { output.bibitem
  740.   list.label.output
  741.   " (" list.year * ")" * output.yearnull
  742.   author empty$
  743.     { editor "author and editor" item.check }
  744.     { crossref missing$
  745.     { "author and editor" editor either.or.check }
  746.     'skip$
  747.       if$
  748.     }
  749.   if$
  750.   title.field field.used =
  751.     { skip$ }
  752.     { format.btitle "title" output.check }
  753.   if$
  754.   crossref missing$
  755.     { format.bvolume output
  756.       format.number.series output
  757.       format.edition output
  758.       publisher "publisher" output.check
  759.       address output
  760.     }
  761.     { format.book.crossref output.nonnull
  762.       format.edition output
  763.     }
  764.   if$
  765.   new.block
  766.   note output
  767.   fin.entry
  768. }
  769.  
  770. FUNCTION {booklet}
  771. { output.bibitem
  772.   list.label.output
  773.   " (" list.year * ")" * output.yearnull
  774.   title.field field.used =
  775.     { skip$ }
  776.     { format.title quote "title" output.check }
  777.   if$
  778.   howpublished output
  779.   address output
  780.   new.block
  781.   note output
  782.   fin.entry
  783. }
  784.  
  785. FUNCTION {inbook}
  786. { output.bibitem
  787.   list.label.output
  788.   " (" list.year * ")" * output.yearnull
  789.   author empty$
  790.     { editor "author and editor" item.check }
  791.     { crossref missing$
  792.     { "author and editor" editor either.or.check }
  793.     'skip$
  794.       if$
  795.     }
  796.   if$
  797.   title.field field.used =
  798.     { skip$ }
  799.     { format.btitle "title" output.check }
  800.   if$
  801.   crossref missing$
  802.     { format.bvolume output
  803.       format.number.series output
  804.       format.edition output
  805.       publisher "publisher" output.check
  806.       address output
  807.     }
  808.     { format.book.crossref output.nonnull
  809.       format.edition output
  810.     }
  811.   if$
  812.   format.chapter.pages "chapter and pages" output.check
  813.   new.block
  814.   note output
  815.   fin.entry
  816. }
  817.  
  818. FUNCTION {incollection}
  819. { output.bibitem
  820.   list.label.output
  821.   " (" list.year * ")" * output.yearnull
  822.   title.field field.used =
  823.     { skip$ }
  824.     { format.title "title" output.check }
  825.   if$
  826.   author "author" item.check
  827.   crossref missing$
  828.     { format.in.ed.booktitle "booktitle" output.check
  829.       format.edition output
  830.       format.bvolume output
  831.       format.number.series output
  832.       publisher "publisher" output.check
  833.       address output
  834.     }
  835.     { format.incoll.inproc.crossref output.nonnull
  836.     }
  837.   if$
  838.   format.chapter.pages output
  839.   new.block
  840.   note output
  841.   fin.entry
  842. }
  843.  
  844. FUNCTION {inproceedings}
  845. { output.bibitem
  846.   list.label.output
  847.   " (" list.year * ")" * output.yearnull
  848.   title.field field.used =
  849.     { skip$ }
  850.     { format.title "title" output.check }
  851.   if$
  852.   author "author" item.check
  853.   crossref missing$
  854.     { format.in.ed.booktitle "booktitle" output.check
  855.       format.bvolume output
  856.       format.number.series output
  857.       address empty$
  858.     { organization output
  859.       publisher output
  860.     }
  861.     { organization output
  862.       publisher output
  863.           address output.nonnull
  864.      }
  865.       if$
  866.     }
  867.     { format.incoll.inproc.crossref output.nonnull
  868.     }
  869.   if$
  870.   format.pages output
  871.   new.block
  872.   note output
  873.   fin.entry
  874. }
  875.  
  876. FUNCTION {conference} { inproceedings }
  877.  
  878. FUNCTION {manual}
  879. { output.bibitem
  880.   list.label.output
  881.   " (" list.year * ")" * output.yearnull
  882.   title.field field.used =
  883.     { skip$ }
  884.     { format.btitle "title" output.check }
  885.   if$
  886.   format.edition output
  887.   author empty$
  888.     { organization empty$
  889.     { address output }
  890.     'skip$
  891.       if$
  892.     }
  893.     { organization output
  894.       address output
  895.     }
  896.   if$
  897.   new.block
  898.   note output
  899.   fin.entry
  900. }
  901.  
  902. FUNCTION {mastersthesis}
  903. { output.bibitem
  904.   list.label.output
  905.   " (" list.year * ")" * output.yearnull
  906.   author "author" item.check
  907.   title.field field.used =
  908.     { skip$ }
  909.     { format.title "title" output.check }
  910.   if$
  911.   "Master's thesis" format.thesis.type output.nonnull
  912.   school "school" output.check
  913.   address output
  914.   new.block
  915.   note output
  916.   fin.entry
  917. }
  918.  
  919. FUNCTION {misc}
  920. { output.bibitem
  921.   list.label.output
  922.   " (" list.year * ")" * output.yearnull
  923.   title.field field.used =
  924.     { skip$ }
  925.     { format.title quote output }
  926.   if$
  927.   howpublished output
  928.   new.block
  929.   note output
  930.   fin.entry
  931.   empty.misc.check
  932. }
  933.  
  934. FUNCTION {phdthesis}
  935. { output.bibitem
  936.   list.label.output
  937.   " (" list.year * ")" * output.yearnull
  938.   author "author" item.check
  939.   title.field field.used =
  940.     { skip$ }
  941.     { title "title" output.check }
  942.   if$
  943.   "PhD thesis" format.thesis.type output.nonnull
  944.   school "school" output.check
  945.   address output
  946.   new.block
  947.   note output
  948.   fin.entry
  949. }
  950.  
  951. FUNCTION {proceedings}
  952. { output.bibitem
  953.   list.label.output
  954.   " (" list.year * ")" * output.yearnull
  955.   title.field field.used =
  956.     { skip$ }
  957.     { format.btitle "title" output.check }
  958.   if$
  959.   format.bvolume output
  960.   format.number.series output
  961.   address empty$
  962.     { editor empty$
  963.     { skip$ }
  964.     { organization output
  965.     }
  966.       if$
  967.       publisher output
  968.     }
  969.     { editor empty$
  970.     'skip$
  971.     { organization output }
  972.       if$
  973.       publisher output
  974.       address output.nonnull
  975.     }
  976.   if$
  977.   new.block
  978.   note output
  979.   fin.entry
  980. }
  981.  
  982. FUNCTION {techreport}
  983. { output.bibitem
  984.   list.label.output
  985.   " (" list.year * ")" * output.yearnull
  986.   author "author" item.check
  987.   title.field field.used =
  988.     { skip$ }
  989.     { format.title "title" output.check }
  990.   if$
  991.   format.tr.number output.nonnull
  992.   institution "institution" output.check
  993.   address output
  994.   new.block
  995.   note output
  996.   fin.entry
  997. }
  998.  
  999. FUNCTION {unpublished}
  1000. { output.bibitem
  1001.   list.label.output
  1002.   " (" list.year * ")" * output.yearnull
  1003.   author "author" item.check
  1004.   title.field field.used =
  1005.     { skip$ }
  1006.     { format.title "title" output.check }
  1007.   if$
  1008.   note "note" output.check
  1009.   fin.entry
  1010. }
  1011.  
  1012. FUNCTION {default.type} { misc }
  1013.  
  1014. MACRO {jan} {"January"}
  1015.  
  1016. MACRO {feb} {"February"}
  1017.  
  1018. MACRO {mar} {"March"}
  1019.  
  1020. MACRO {apr} {"April"}
  1021.  
  1022. MACRO {may} {"May"}
  1023.  
  1024. MACRO {jun} {"June"}
  1025.  
  1026. MACRO {jul} {"July"}
  1027.  
  1028. MACRO {aug} {"August"}
  1029.  
  1030. MACRO {sep} {"September"}
  1031.  
  1032. MACRO {oct} {"October"}
  1033.  
  1034. MACRO {nov} {"November"}
  1035.  
  1036. MACRO {dec} {"December"}
  1037.  
  1038. MACRO {acmcs} {"ACM Computing Surveys"}
  1039.  
  1040. MACRO {acta} {"Acta Informatica"}
  1041.  
  1042. MACRO {cacm} {"Communications of the ACM"}
  1043.  
  1044. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  1045.  
  1046. MACRO {ibmsj} {"IBM Systems Journal"}
  1047.  
  1048. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  1049.  
  1050. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  1051.  
  1052. MACRO {ieeetcad}
  1053.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  1054.  
  1055. MACRO {ipl} {"Information Processing Letters"}
  1056.  
  1057. MACRO {jacm} {"Journal of the ACM"}
  1058.  
  1059. MACRO {jcss} {"Journal of Computer and System Sciences"}
  1060.  
  1061. MACRO {scp} {"Science of Computer Programming"}
  1062.  
  1063. MACRO {sicomp} {"SIAM Journal on Computing"}
  1064.  
  1065. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  1066.  
  1067. MACRO {tods} {"ACM Transactions on Database Systems"}
  1068.  
  1069. MACRO {tog} {"ACM Transactions on Graphics"}
  1070.  
  1071. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  1072.  
  1073. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  1074.  
  1075. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  1076.  
  1077. MACRO {tcs} {"Theoretical Computer Science"}
  1078.  
  1079. READ
  1080.  
  1081. EXECUTE {init.field.constants}
  1082.  
  1083. FUNCTION {sortify}
  1084. { purify$
  1085.   "l" change.case$
  1086. }
  1087.  
  1088. FUNCTION {author.key.label}
  1089. { author empty$
  1090.     { key empty$
  1091.     { title.field 'field.used := }
  1092.     { key.field 'field.used := }
  1093.       if$
  1094.     }
  1095.     { author.field 'field.used := }
  1096.   if$
  1097. }
  1098.  
  1099. FUNCTION {author.editor.key.label}
  1100. { author empty$
  1101.     { editor empty$
  1102.     { key empty$
  1103.         { title.field 'field.used := }
  1104.         { key.field 'field.used := }
  1105.       if$
  1106.       }
  1107.     { editor.field 'field.used := }
  1108.       if$
  1109.     }
  1110.     { author.field 'field.used := }
  1111.   if$
  1112. }
  1113.  
  1114. FUNCTION {author.key.organization.label}
  1115. { author empty$
  1116.     { key empty$
  1117.     { organization empty$
  1118.         { title.field 'field.used := }
  1119.         { organization.field 'field.used := }
  1120.       if$
  1121.     }
  1122.     { key.field 'field.used := }
  1123.       if$
  1124.     }
  1125.     { author.field 'field.used := }
  1126.   if$
  1127. }
  1128.  
  1129. FUNCTION {editor.key.organization.label}
  1130. { editor empty$
  1131.     { key empty$
  1132.     { organization empty$
  1133.         { title.field 'field.used := }
  1134.         { organization.field 'field.used := }
  1135.       if$
  1136.     }
  1137.     { key.field 'field.used := }
  1138.       if$
  1139.     }
  1140.     { editor.field 'field.used := }
  1141.   if$
  1142. }
  1143.  
  1144. FUNCTION {sort.format.title}
  1145. { 't :=
  1146.   "A " #2
  1147.     "An " #3
  1148.       "The " #4 t chop.word
  1149.     chop.word
  1150.   chop.word
  1151.   sortify
  1152.   #1 global.max$ substring$
  1153. }
  1154.  
  1155. FUNCTION {calc.label}
  1156. { type$ "book" =
  1157.   type$ "inbook" =
  1158.   or
  1159.     'author.editor.key.label
  1160.     { type$ "proceedings" =
  1161.     'editor.key.organization.label
  1162.     { type$ "manual" =
  1163.         'author.key.organization.label
  1164.         'author.key.label
  1165.       if$
  1166.     }
  1167.       if$
  1168.     }
  1169.   if$
  1170.   make.abbr.label
  1171.   title.field field.used =
  1172.     { sort.format.title }
  1173.     { sortify }
  1174.   if$
  1175.   year field.or.null purify$ #-1 #4 substring$ sortify
  1176.   *
  1177.   'sort.label :=
  1178. }
  1179.  
  1180. FUNCTION {first.presort}
  1181. { calc.label
  1182.   sort.label
  1183.   title.field field.used =
  1184.     { skip$ }
  1185.     { "    "
  1186.       *
  1187.       make.list.label sortify
  1188.       *
  1189.       "    "
  1190.       *
  1191.       title field.or.null
  1192.       sort.format.title
  1193.       *
  1194.     }
  1195.   if$
  1196.   #1 entry.max$ substring$
  1197.   'sort.key$ :=
  1198. }
  1199.  
  1200. ITERATE {first.presort}
  1201.  
  1202. SORT
  1203.  
  1204. STRINGS { last.sort.label next.extra }
  1205.  
  1206. INTEGERS { last.extra.num }
  1207.  
  1208. FUNCTION {initialize.last.extra.num}
  1209. { #0 int.to.chr$ 'last.sort.label :=
  1210.   "" 'next.extra :=
  1211.   #0 'last.extra.num :=
  1212. }
  1213.  
  1214. FUNCTION {forward.pass}
  1215. { last.sort.label sort.label =
  1216.     { last.extra.num #1 + 'last.extra.num :=
  1217.       last.extra.num int.to.chr$ 'extra.label :=
  1218.     }
  1219.     { "a" chr.to.int$ 'last.extra.num :=
  1220.       "" 'extra.label :=
  1221.       sort.label 'last.sort.label :=
  1222.     }
  1223.   if$
  1224. }
  1225.  
  1226. FUNCTION {reverse.pass}
  1227. { next.extra "b" =
  1228.     { "a" 'extra.label := }
  1229.     'skip$
  1230.   if$
  1231.   year empty$
  1232.     { "n.d." extra.label emphasize * 'list.year := }
  1233.     { year extra.label emphasize * 'list.year := }
  1234.   if$
  1235.   extra.label 'next.extra :=
  1236. }
  1237.  
  1238. EXECUTE {initialize.last.extra.num}
  1239.  
  1240. ITERATE {forward.pass}
  1241.  
  1242. REVERSE {reverse.pass}
  1243.  
  1244. FUNCTION {second.presort}
  1245. { make.list.label
  1246.   title.field field.used =
  1247.     { sort.format.title }
  1248.     { sortify }
  1249.   if$
  1250.   "    "
  1251.   *
  1252.   list.year field.or.null sortify
  1253.   *
  1254.   "    "
  1255.   *
  1256.   title.field field.used =
  1257.     { skip$ }
  1258.     { title field.or.null
  1259.       sort.format.title
  1260.       *
  1261.     }
  1262.   if$
  1263.   #1 entry.max$ substring$
  1264.   'sort.key$ :=
  1265. }
  1266.  
  1267. ITERATE {second.presort}
  1268.  
  1269. SORT
  1270.  
  1271. FUNCTION {begin.bib}
  1272. { preamble$ empty$
  1273.     'skip$
  1274.     { preamble$ write$ newline$ }
  1275.   if$
  1276.   "\begin{thebibliography}{xx}" write$ newline$
  1277. }
  1278.  
  1279. EXECUTE {begin.bib}
  1280.  
  1281. EXECUTE {init.state.consts}
  1282.  
  1283. ITERATE {call.type$}
  1284.  
  1285. FUNCTION {end.bib}
  1286. { newline$
  1287.   "\end{thebibliography}" write$ newline$
  1288. }
  1289.  
  1290. EXECUTE {end.bib}
  1291.  
  1292. %%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IFAC.bst %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1293.